blur: Fix pixel sizes
authorBenjamin Otte <otte@redhat.com>
Wed, 19 Sep 2012 20:23:47 +0000 (22:23 +0200)
committerBenjamin Otte <otte@redhat.com>
Thu, 20 Sep 2012 00:45:41 +0000 (02:45 +0200)
The code accesses pixels in a chunks of 4 bytes, so we must only support
formats where the size of a single pixel is 4 bytes.
Fix RGB24 to be 4 bytes (the alpha channel is ignored) and disallow A8.

gtk/gtkcairoblur.c

index fb08401d045970c811578c898ffec0e5ff6a47e7..7748431ec3e68b3d78b57f8aff79464385ad44ae 100644 (file)
@@ -227,8 +227,7 @@ _gtk_cairo_blur_surface (cairo_surface_t* surface,
   g_return_if_fail (cairo_surface_get_type (surface) == CAIRO_SURFACE_TYPE_IMAGE);
 
   format = cairo_image_surface_get_format (surface);
-  g_return_if_fail (format == CAIRO_FORMAT_A8 ||
-                    format == CAIRO_FORMAT_RGB24 ||
+  g_return_if_fail (format == CAIRO_FORMAT_RGB24 ||
                     format == CAIRO_FORMAT_ARGB32);
 
   if (radius == 0)
@@ -248,12 +247,10 @@ _gtk_cairo_blur_surface (cairo_surface_t* surface,
       _expblur (pixels, width, height, 4, radius, 16, 7);
       break;
     case CAIRO_FORMAT_RGB24:
-      _expblur (pixels, width, height, 3, radius, 16, 7);
-      break;
-    case CAIRO_FORMAT_A8:
-      _expblur (pixels, width, height, 1, radius, 16, 7);
+      _expblur (pixels, width, height, 4, radius, 16, 7);
       break;
     default:
+      g_assert_not_reached ();
       break;
   }